/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.controlador;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.XMLReporte;
import sv.com.intesal.clases.cVarios;
import sv.com.intesal.compra.bean.CXP;
import sv.com.intesal.compra.sql.SQLCXP;
import sv.com.intesal.conexion.cConexion;

/**
 *
 * @author ejerez
 */
public class CXPControlador {

    public List<CXP> getCXP_Enca(CXP co) throws Exception {

        List<CXP> lista = new ArrayList<CXP>();

        try {
            String var_fechas = this.getFiltro_Fechas(co);
            String var_proveedor = this.getFiltro_Proveedor(co);

            String sql = SQLCXP.getCXP_Enca + var_fechas + var_proveedor + " group by p.empresa_p,p.id_p,c.id_c order by empresa_p ";
            //String sql = SQLCXP.getCXP_Enca + var_fechas + var_proveedor + SQLCXP.getGroupBy;

            System.out.println("ENCA= " + sql);
            ResultSet rs = cConexion.conectar().prepareStatement(sql).executeQuery();
            cVarios v = new cVarios();
            while (rs.next()) {

                CXP c = new CXP();
                c.setTotal_compra(v.AproximarDecimal(rs.getDouble("total_compra")));
                c.setTotal_abono_compra(v.AproximarDecimal(rs.getDouble("total_abono_compra")));
                c.setTotal_dc(v.AproximarDecimal(rs.getDouble("total_dc")));
                c.setTotal_pendiente(v.AproximarDecimal(rs.getDouble("total_pendiente")));
                c.setEmpresa_p(rs.getString("empresa_p"));
                c.setId_p(rs.getInt("id_p"));
                lista.add(c);
            }

            rs.close();
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<CXP> getCPX_Deta(Integer codigo_p) throws Exception {

        List<CXP> lista = new ArrayList<CXP>();
        try {

            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLCXP.getCXP_Deta + SQLCXP.getWhereCondition + SQLCXP.getGroupBy);
            ps.setInt(1, codigo_p);

            System.out.println("DETA= " + ps.toString());
            ResultSet rs = ps.executeQuery();

            cVarios v = new cVarios();
            while (rs.next()) {
                CXP c = new CXP();
                c.setTotal_compra(v.AproximarDecimal(rs.getDouble("total_compra")));
                c.setTotal_abono_compra(v.AproximarDecimal(rs.getDouble("total_abono_compra")));
                c.setTotal_dc(v.AproximarDecimal(rs.getDouble("total_dc")));
                c.setTotal_pendiente(v.AproximarDecimal(rs.getDouble("total_pendiente")));
                c.setEmpresa_p(rs.getString("empresa_p"));
                c.setFactura_c(rs.getString("factura_c"));
                c.setPlazo_c(rs.getInt("plazo_c"));
                c.setDias_restantes(rs.getInt("dias_restante"));
                c.setFecha_c(rs.getDate("fecha_c"));
                c.setFecha_vencimiento(rs.getDate("vencimiento"));
                lista.add(c);
            }

            ps.close();
            rs.close();
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public CXP getCPX_Deta_Totales(Integer codigo_p) throws Exception {

        try {
            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLCXP.getCXP_Deta_Totales);
            ps.setInt(1, codigo_p);
            ResultSet rs = ps.executeQuery();

            CXP c = new CXP();
            cVarios v = new cVarios();
            while (rs.next()) {
                c.setTotal_compra(v.AproximarDecimal(rs.getDouble("total_compra")));
                c.setTotal_abono_compra(v.AproximarDecimal(rs.getDouble("total_abono_compra")));
                c.setTotal_dc(v.AproximarDecimal(rs.getDouble("total_dc")));
                c.setTotal_pendiente(v.AproximarDecimal(rs.getDouble("total_pendiente")));
            }

            ps.close();
            rs.close();
            return c;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public CXP getCXP_Enca_Totales(CXP co) throws Exception {
        try {
            String var_fechas = this.getFiltro_Fechas(co);
            String var_proveedor = this.getFiltro_Proveedor(co);

            String sql = SQLCXP.getCXP_Deta + var_fechas + var_proveedor + SQLCXP.getGroupBy;

            System.out.println("Totales= "+ sql);
            ResultSet rs = cConexion.conectar().prepareStatement(sql).executeQuery();
            cVarios v = new cVarios();
            CXP c = new CXP();
            while (rs.next()) {
                c.setTotal_compra(v.AproximarDecimal(rs.getDouble("total_compra")));
                c.setTotal_abono_compra(v.AproximarDecimal(rs.getDouble("total_abono_compra")));
                c.setTotal_dc(v.AproximarDecimal(rs.getDouble("total_dc")));
                c.setTotal_pendiente(v.AproximarDecimal(rs.getDouble("total_pendiente")));
            }
            rs.close();
            return c;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private String getFiltro_Fechas(CXP co) {
        try {
            String var_fechas = " ";
            if (co.getFecha_i() != null && co.getFecha_f() == null) {
                var_fechas = " and c.fecha_c >='" + cVarios.getFecha(co.getFecha_i()) + "' ";
            } else if (co.getFecha_f() != null && co.getFecha_i() == null) {
                var_fechas = " and c.fecha_c <='" + cVarios.getFecha(co.getFecha_f()) + "' ";
            } else if (co.getFecha_i() == null && co.getFecha_f() == null) {
                var_fechas = " ";
            } else {
                var_fechas = " and c.fecha_c between '" + cVarios.getFecha(co.getFecha_i()) + "' and '" + cVarios.getFecha(co.getFecha_f()) + "' ";
            }
            return var_fechas;
        } catch (Exception e) {
            return " ";
        }
    }

    private String getFiltro_Proveedor(CXP co) {
        try {
            String var_proveedor = " and p.id_p=" + co.getId_p() + " ";

            if (co.getId_p() == null) {
                var_proveedor = " ";//trae todos los proveedores.
            }
            return var_proveedor;
        } catch (Exception e) {
            return " ";
        }
    }

    /**********************************************************************************************/
    /*REPORTES DE COMPRA*/
    /**
     * Generar Reporte de Cuentas por Pagar.
     * @return nothing
     * @exception Exception
     */
    public void generarReporte_CXP(CXP co) throws Exception {
        try {
            String var_fechas = this.getFiltro_Fechas(co);
            String var_proveedor = this.getFiltro_Proveedor(co);

            String sql = SQLCXP.getCXP_Deta + var_fechas + var_proveedor + SQLCXP.getGroupBy;
            XMLReporte xml = new XMLReporte();
            xml.Element_XML(sql);
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    /*REPORTES DE COMPRA*/
    /**********************************************************************************************/
}
